#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
typedef long long LL;
const int MAXN=3e5+5,MAXM=3.2e4+5,S=31630,p=998244353;
int qpow(int x,int y) {
	int res=1;
	while(y) {
		if(y&1) res=1ll*res*x%p;
		x=1ll*x*x%p,y>>=1;
	}return res;
}
struct Segment_Tree {
	int d[MAXN*200],ls[MAXN*200],rs[MAXN*200],s[MAXN*200],top,cnt;
	int newnode() {return top?s[top--]:++cnt;}
	void modify(int l,int r,int k,int&p,int c) {
		if(!p) p=newnode();
		d[p]+=c;
		if(l==r) return;
		int mid=(l+r)>>1;
		if(k<=mid) modify(l,mid,k,ls[p],c);
		else modify(mid+1,r,k,rs[p],c);
		if(!d[p]) s[++top]=p,p=0;
	}
	int query(int l,int r,int ql,int qr,int p) {
		if(!p) return 0;
		if(l>=ql&&r<=qr) return d[p];
		int mid=(l+r)>>1;
		if(qr<=mid) return query(l,mid,ql,qr,ls[p]);
		if(ql>mid) return query(mid+1,r,ql,qr,rs[p]);
		return query(l,mid,ql,qr,ls[p])+query(mid+1,r,ql,qr,rs[p]);
	}
}SGT;
struct Sigemade_Tree {
	int n,d[MAXN];
	void init(int x) {n=x;}
	void modify(int x) {for(int i=x;i;i-=(i&-i)) ++d[i];}
	int query(int x) {int res=0;for(int i=x;i<=n;i+=(i&-i)) res+=d[i];return res;}
}SMT;
struct Fenwick_Tree {
	int n,rt[MAXN];
	void init(int x) {n=x;}
	void modify(int x,int y,int c) {
		for(int i=x;i<=n;i+=(i&-i)) SGT.modify(1,n,y,rt[i],c);
	}
	int query(int x,int l,int r) {
		int res=0;
		for(int i=x;i;i-=(i&-i)) res+=SGT.query(1,n,l,r,rt[i]);
		return res;
	}
	int query(int l,int r,int ql,int qr) {
		return query(r,ql,qr)-query(l-1,ql,qr);
	}
}BIT;
struct Matrix {
	int n,m,a[8][8];
	void build() {for(int i=1;i<=n;++i) a[i][i]=1;}
	Matrix(int x=0,int y=0) {n=x,m=y;for(int i=1;i<=x;++i) for(int j=1;j<=y;++j) a[i][j]=0;}
	friend Matrix operator*(Matrix x,Matrix y) {
		Matrix z(x.n,y.m);
		for(int i=1;i<=x.n;++i) {
			for(int j=1;j<=y.m;++j) {
				for(int k=1;k<=x.m;++k) {
					z.a[i][j]=(z.a[i][j]+1ll*x.a[i][k]*y.a[k][j])%p;
				}
			}
		}return z;
	}
}B1[MAXM],B2[MAXM];
LL A,B,C,D,E,F;
int n,q,a[MAXN];
void solve(int k) {
	Matrix ans(1,7);
	F=(1ll*n*(n-1)/2-A)%p;
	ans.a[1][1]=((1ll*(n-2)*(n-3)/2)%p)*((1ll*n*(n-1)/2)%p)%p;
	ans.a[1][2]=((B-A)%p+p)%p;
	ans.a[1][3]=((C-F)%p+p)%p;
	ans.a[1][4]=((D-F)%p+p)%p;
	ans.a[1][5]=A%p;
	ans.a[1][6]=F%p;
	ans.a[1][7]=((E-A)%p+p)%p;
	ans=ans*B1[k%S]*B2[k/S];
	cout<<1ll*ans.a[1][5]*qpow(qpow((1ll*n*(n-1)/2)%p,k),p-2)%p<<endl;
}
signed main() {
	freopen("random.in","r",stdin);
	freopen("random.out","w",stdout);
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int k;cin>>n>>k>>q;
	B1[0]=B1[1]=Matrix(7,7),B1[0].build(),B2[0]=B1[0];
	B1[1].a[1][1]=(1ll*n*(n-1)/2-4)%p,B1[1].a[1][2]=1,B1[1].a[1][3]=1,B1[1].a[1][4]=1,B1[1].a[1][5]=0,B1[1].a[1][6]=0,B1[1].a[1][7]=1;
	B1[1].a[2][1]=n-3,B1[1].a[2][2]=(1ll*(n-1)*(n-2)/2-1)%p,B1[1].a[2][3]=1,B1[1].a[2][4]=1,B1[1].a[2][5]=1,B1[1].a[2][6]=0,B1[1].a[2][7]=0;
	B1[1].a[3][1]=n-3,B1[1].a[3][2]=1,B1[1].a[3][3]=(1ll*(n-1)*(n-2)/2-1)%p,B1[1].a[3][4]=0,B1[1].a[3][5]=0,B1[1].a[3][6]=1,B1[1].a[3][7]=1;
	B1[1].a[4][1]=n-3,B1[1].a[4][2]=1,B1[1].a[4][3]=0,B1[1].a[4][4]=(1ll*(n-1)*(n-2)/2-1)%p,B1[1].a[4][5]=0,B1[1].a[4][6]=1,B1[1].a[4][7]=1;
	B1[1].a[5][1]=0,B1[1].a[5][2]=n-2,B1[1].a[5][3]=0,B1[1].a[5][4]=0,B1[1].a[5][5]=(1ll*(n-2)*(n-3)/2)%p,B1[1].a[5][6]=1,B1[1].a[5][7]=n-2;
	B1[1].a[6][1]=0,B1[1].a[6][2]=0,B1[1].a[6][3]=n-2,B1[1].a[6][4]=n-2,B1[1].a[6][5]=1,B1[1].a[6][6]=(1ll*(n-2)*(n-3)/2)%p,B1[1].a[6][7]=0;
	B1[1].a[7][1]=n-3,B1[1].a[7][2]=0,B1[1].a[7][3]=1,B1[1].a[7][4]=1,B1[1].a[7][5]=1,B1[1].a[7][6]=0,B1[1].a[7][7]=(1ll*(n-1)*(n-2)/2-1)%p;
	for(int i=2;i<=S;++i) B1[i]=B1[i-1]*B1[1];
	for(int i=1;i<=S;++i) B2[i]=B2[i-1]*B1[S];
	BIT.init(n),SMT.init(n);
	for(int i=1;i<=n;++i) {
		cin>>a[i];
		BIT.modify(i,a[i],1);
		A+=SMT.query(a[i]);
		SMT.modify(a[i]);
		B+=1ll*(n-i)*(a[i]-1);
		C+=1ll*(n-i)*(n-a[i]);
		D+=1ll*(i-1)*(a[i]-1);
		E+=1ll*(i-1)*(n-a[i]);
	}
	solve(k);
	for(int i=1;i<=q;++i) {
		int x,y;
		cin>>x>>y;
		if(a[x]>a[y]) {
			--A;
			if(a[y]+1!=a[x]&&x+1!=y) {
				A-=2*BIT.query(x+1,y-1,a[y]+1,a[x]-1);
			}
		}
		else {
			++A;
			if(a[x]+1!=a[y]&&x+1!=y) {
				A+=2*BIT.query(x+1,y-1,a[x]+1,a[y]-1);
			}
		}
		B-=1ll*(n-x)*(a[x]-1);
		C-=1ll*(n-x)*(n-a[x]);
		D-=1ll*(x-1)*(a[x]-1);
		E-=1ll*(x-1)*(n-a[x]);
		B-=1ll*(n-y)*(a[y]-1);
		C-=1ll*(n-y)*(n-a[y]);
		D-=1ll*(y-1)*(a[y]-1);
		E-=1ll*(y-1)*(n-a[y]);
		BIT.modify(x,a[x],-1);
		BIT.modify(y,a[y],-1);
		swap(a[x],a[y]);
		BIT.modify(x,a[x],1);
		BIT.modify(y,a[y],1);
		B+=1ll*(n-x)*(a[x]-1);
		C+=1ll*(n-x)*(n-a[x]);
		D+=1ll*(x-1)*(a[x]-1);
		E+=1ll*(x-1)*(n-a[x]);
		B+=1ll*(n-y)*(a[y]-1);
		C+=1ll*(n-y)*(n-a[y]);
		D+=1ll*(y-1)*(a[y]-1);
		E+=1ll*(y-1)*(n-a[y]);
		solve(k-i);
	}
	return 0;
}
/*
5 22 7 2 28 10 9 8 21 23 11 24 3 30 19 13 12 20 29 26 25 15 14 18 6 1 16 17 27 4
15 22
ji 19 15
5 22 7 2 28 10 9 8 21 23 11 24 3 30 15 13 12 20 29 26 25 19 14 18 6 1 16 17 27 4
7 20
ji 9 26
5 22 7 2 28 10 26 8 21 23 11 24 3 30 15 13 12 20 29 9 25 19 14 18 6 1 16 17 27 4
*/